import launch
import launch_ros
import os
from ament_index_python.packages import get_package_share_directory
import launch_ros.parameter_descriptions

def generate_launch_description():
    #获取默认的urdl路径
    urdf_package_path = get_package_share_directory('fishbot_description')
    default_urdf_path = os.path.join(urdf_package_path,'urdf','test','first_robot.urdf.xacro')
    #声明一个urdf目录的参数，方便修改
    action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(
        name = 'model',default_value = str(default_urdf_path),description = "加载的模型文件路径"
    )
    #通过文件路径获取内容，并转换成参数值对象，以供传入 robot_state_publisher
    
    command_result = launch.substitutions.Command(['xacro ',launch.substitutions.LaunchConfiguration('model')])

    robot_description_value = launch_ros.parameter_descriptions.ParameterValue(command_result,value_type=str)

    #启动robot
    action_robot_state_publish = launch_ros.actions.Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        parameters=[{'robot_description':robot_description_value}]
    )
    #启动joint
    action_joint_state_publish = launch_ros.actions.Node(
        package='joint_state_publisher',
        executable='joint_state_publisher',
    )

    #启动rviz
    action_rviz_node = launch_ros.actions.Node(
        package='rviz2',
        executable='rviz2',
    )

    return launch.LaunchDescription(
        [
            action_declare_arg_mode_path,
            action_robot_state_publish,
            action_joint_state_publish,
            action_rviz_node,

        ]
    )